package groovy
/**
 * plan A
 *
 * 1、开发编写类似于如下代码
 * public String prettify(String sex){
 *      return "abc${sex}bcd";
 * }
 *
 * 2、 程序将函数拼接/或者注入到TestMop class中。
 * 2.1 方法1，使用Script 对象进行字符串拼接。
 * 2.2 方法2，使用Class对象进行addMethod。 （待测试）
 *
 *
 * 3、在函数库中注册。或者导出语法糖。
 * 3.1 functionMap.add("prettify",testMopA.&prettify)
 * 3.2 def prettify = testMopA.&prettify
 *
 * 4、 调用方直接调用prettify("aaaaa") 即可
 */

class TestMop  {
    String prettify(String sex){
        return "abc${sex}bcd";
    }
}

def recordDuration_invokeMethod() {
    TestMop.metaClass.invokeMethod = {
        String mName, mArgs ->
            def m = TestMop.metaClass.getMetaMethod(mName, mArgs)
            long s = System.currentTimeMillis();
            def result = m.invoke( delegate, mArgs)
            long e = System.currentTimeMillis();
            long duration = e - s;
            println(" MOP耗费时间：" + duration);
            return result;
    }
}

recordDuration_invokeMethod()
TestMop testMopA = new TestMop();
def prettify = testMopA.&prettify
print(prettify("111"));
